package com.hopedove.repository

import android.app.Application
import com.hopedove.data.Datetime
import com.hopedove.net.ErrResponse
import com.hopedove.net.domain.Communication
import com.hopedove.net.domain.GetDateTime
import com.hopedove.utils.CommonUtil
import java.io.File
import java.text.SimpleDateFormat
import java.util.*

class CommonRepository(private val application: Application) {

    private var serverDateTime: Datetime? = null

    // 获取服务器时间
    fun getServerDateTime(refresh: Boolean = false): Datetime {
        val dt = serverDateTime ?: Datetime()

        // 服务器时间没同步，则请求服务器获取最新时间
        if (serverDateTime == null || refresh) {
            Communication.asyncRequest(GetDateTime()) { r ->
                // 服务器返回的是普通文本，目前的处理逻辑是把普通文本当作错误消息来处理的。
                if (r is ErrResponse) {
                    serverDateTime = Datetime.parseDateString(r.errText)
                }
            }
        }

        return dt
    }


    fun getAppVersionName(): String = CommonUtil.getAppVersionName(application)

    // 新建一个路径，供升级下载用
    fun newDownloadApkPathForUpdate(name: String = defaultDownloadApkName()): File {
        return File(application.getExternalFilesDir(null), name)
    }

    private fun defaultDownloadApkName(): String {
        val date = SimpleDateFormat(
            "yyyy-MM-dd",
            Locale.getDefault()
        ).format(Date(System.currentTimeMillis()))
        return "newApk_${date}.apk"
    }

}